Флаги.
O D I T S Z A P C * * * * * *
Команда:
SCASW
Логика
CMP AX, (ES:DI) ;только устанавливает признаки
if DF = 0
DI = DI + 2
else
DI = DI - 2
Эта команда сравнивает AX со словом на которое указывает ES:DI, и устанавливает флаги в соответствии с результатами сравнения. Сами операнды не изменяются. После сравнения, DI увеличивается на 2, если флаг направления сброшен, или уменьшается на 2, если флаг направления установлен. Тем самым подготавливается к сравнению следующее слово.
| Операнды | Такт байты (слова) | Обращения | Байты | Пример |
| нет операндов | 19 | 1 | 1 | SCASW |
| (повтор) | 9+19/rep | 1/rep | 1 | REPNE SCASW |
Примечания:
Команда SCASW полезна в тех случаях, когда требуется найти ячейку с заданным словом. Если Вы хотите сравнить две строки из памяти поэлементно, то используйте команду CMPSW.
Пример.
Пусть имеет место следующее определение :
LOST_A DB 100 dup (?)
Тогда следующий пример описывает поиск символа 'A' в блоке памяти длиной 100 байтов, начинающемся с LOST_A :
MOV AX,DS
MOV ES,AX ;SCASW использует ES:DI,
;поэтому копируем DS в ES
CLD ;сканировать будем в прямом направлении
MOV AL,'A' ;ищем "потерянное" 'A'
MOV CX,50 ;сканировать будем 50 слов
;(CX используется в REPNE)
LEA DI,LOST_A ;засылаем стартовый адрес в DI
REPNE SCASW ;ищем 'A'
JE FOUND ;признак ZF равен 1, если мы нашли 'A'
NOTFOUND: ;если мы попали сюда,
;то 'A' не обнаружено
FOUND:DEC DI ;возвращаем указатель DI
;на первое обнаруженное
DEC DI ;вхождение 'A'
После выхода из цикла REPNE SCASW, ZF=1, если вхождение 'A' было обнаружено, и ZF=0, иначе. В первом случае DI указывает на слово, следующее за словом, где находится 'A', поэтому мы производим коррекцию указателя DI с помощью двух DEC DI.